์ž‘์„ฑ: 2026-03-04 02:23:35์ˆ˜์ •: 2026-03-04 04:03:38

Spring Boot ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ํ•˜๊ธฐ: ์ฒซ ๋ฒˆ์งธ REST API ๋งŒ๋“ค๊ธฐ

์Šคํ”„๋ง ๋ถ€ํŠธ(Spring Boot)๋Š” ์„ค์ •์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ํ”„๋กœ์ ํŠธ๋ฅผ ์‹ ์†ํ•˜๊ฒŒ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. 2026๋…„ ๊ธฐ์ค€ ์ตœ์‹  ํ™˜๊ฒฝ์ธ Java 21/25์™€ Spring Boot 3.x๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฒซ ๋ฒˆ์งธ ๋ฐฑ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


1. ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ: Spring Initializr ํ™œ์šฉ

๊ฐ€์žฅ ๋น ๋ฅด๊ณ  ํ‘œ์ค€์ ์ธ ๋ฐฉ๋ฒ•์€ start.spring.io ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์„ค์ • ๊ถŒ์žฅ๊ฐ’:

  • Project: Gradle - Groovy (๊ฐ€์žฅ ๋Œ€์ค‘์ ) ํ˜น์€ Maven
  • Language: Java
  • Spring Boot: 3.4.x (์•ˆ์ • ๋ฒ„์ „ ์ค‘ ์ตœ์‹ )
  • Java: 21 (LTS ๋ฒ„์ „ ๊ถŒ์žฅ)
  • Dependencies: Spring Web, Lombok, Spring Boot DevTools ์ถ”๊ฐ€

2. ๋นŒ๋“œ ๋„๊ตฌ๋ณ„ ์˜์กด์„ฑ ์„ค์ • (build.gradle vs pom.xml)

ํ”„๋กœ์ ํŠธ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ๊ฐ ๋นŒ๋“œ ๋„๊ตฌ์— ๋งž๋Š” ์„ค์ • ํŒŒ์ผ์ด ์ƒ๊น๋‹ˆ๋‹ค.

Maven (pom.xml)

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

Gradle (build.gradle)

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.4.0'
    id 'io.spring.dependency-management' version '1.1.6'
}
 
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

3. ์ฒซ ๋ฒˆ์งธ ์ปจํŠธ๋กค๋Ÿฌ ์ž‘์„ฑ

์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ๋ฐ›์•„ ์‘๋‹ต์„ ๋ณด๋‚ด์ฃผ๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ API๋ฅผ ์ž‘์„ฑํ•ด ๋ด…๋‹ˆ๋‹ค.

HelloController.java

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
 
@RestController
public class HelloController {
 
    @GetMapping("/hello")
    public String sayHello() {
        return "Hello, Spring Boot 3 with Java 21!";
    }
}
  • @RestController: ์ด ํด๋ž˜์Šค๊ฐ€ REST API๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ์ž„์„ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค.
  • @GetMapping("/hello"): ๋ธŒ๋ผ์šฐ์ €์—์„œ /hello ๊ฒฝ๋กœ๋กœ ์ ‘์†ํ–ˆ์„ ๋•Œ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค.

3. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰

Application.java ํŒŒ์ผ์„ ์—ด์–ด ๋ฉ”์ธ ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์Šคํ”„๋ง ๋ถ€ํŠธ์—๋Š” ๋‚ด์žฅ ์„œ๋ฒ„(Tomcat)๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ๋ณ„๋„์˜ ์„œ๋ฒ„ ์„ค์น˜ ์—†์ด ๋ฐ”๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

์‹คํ–‰ ํ›„ ๋ธŒ๋ผ์šฐ์ €์—์„œ http://localhost:8080/hello์— ์ ‘์†ํ•˜์—ฌ "Hello, Spring Boot 3 with Java 21!"์ด๋ผ๋Š” ๋ฌธ๊ตฌ๊ฐ€ ๋‚˜์˜ค๋ฉด ์„ฑ๊ณต์ž…๋‹ˆ๋‹ค.


4. 2026๋…„ ํ™˜๊ฒฝ์— ๋งž์ถ˜ ์ถ”๊ฐ€ ํŒ

์„ฑ๋Šฅ ์ตœ์ ํ™”: ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ ํ™œ์„ฑํ™”

Java 21/25 ํ™˜๊ฒฝ์ด๋ผ๋ฉด application.properties์— ์•„๋ž˜ ํ•œ ์ค„์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ์ฒ˜๋ฆฌ ๋Šฅ๋ ฅ์„ ๋Œ€ํญ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

spring.threads.virtual.enabled=true

Lombok ํ™œ์šฉํ•˜๊ธฐ

ํด๋ž˜์Šค์— @Data๋‚˜ @AllArgsConstructor ๊ฐ™์€ ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์—ฌ Getter/Setter ๋“ฑ ๋ฐ˜๋ณต์ ์ธ ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜์„ธ์š”.


5. ๋‹ค์Œ ๋‹จ๊ณ„ ์ œ์•ˆ

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™: Spring Data JPA๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ DB์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์•„ ๋ณด์„ธ์š”.
  • ์˜ˆ์™ธ ์ฒ˜๋ฆฌ: @RestControllerAdvice๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „์—ญ ์—๋Ÿฌ ํ•ธ๋“ค๋ง์„ ๊ตฌํ˜„ํ•ด ๋ณด์„ธ์š”.
  • ๋ณด์•ˆ: Spring Security๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž ์ธ์ฆ ๋ฐ ์ธ๊ฐ€ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ด ๋ณด์„ธ์š”.

์ด์ œ ์—ฌ๋Ÿฌ๋ถ„์€ ๊ฐ•๋ ฅํ•œ ์ž๋ฐ” ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์˜ ์ฒซ๋ฐœ์„ ๋‚ด๋””๋Ž ์Šต๋‹ˆ๋‹ค!